
**********************************************************************************
**********************************************************************************
** This code replicates all tables in 								**
** "Remote Board Meetings and Board Monitoring Effectiveness: Evidence from China"	**
** by Xinni Cai, Fuxiu Jiang, and Jun-Koo Kang.						**
**																				**
** The provided data sets on which the code can run are pseudo data sets		**
** with random numbers that inherit the formats of the original data sets.		**
**********************************************************************************
**********************************************************************************

// Control variables for attendance analyses
	global bm "propnum annmt bmnum"
	global fir "roa size tobinq state top1" 
	global gov "duality"
	global dir "avginddiflc avgboardseat avgmale avgindr boardsize" 
global c_attend "$dir $gov $fir"
global c_attend_noinddir "avgindr boardsize $gov $fir"
// Control variables for forced turnover analyses
	global bm "propnum annmt bmnum"
	global fir "roa lev size tobinq state top1 instratio" 
	global fir_noroa "lev size tobinq state top1 instratio"
	global gov "duality ceofamily ceoratio age_CEO tenure_CEO"
	global dir "avginddiflc avgboardseat avgmale avgindr boardsize" 
global c_force "$dir $gov $fir_noroa"
global c_force_nofir "$dir $gov"
// Control variables for dissent analyses
	global bm "propnum annmt bmnum"
	global fir "roa lev size tobinq state top1 instratio"
	global gov "duality"
	global dir "avginddiflc avgboardseat avgmale avgindr boardsize" 
global c_dissent "$dir $gov $fir"
global c_dissent_noinddir "avgindr boardsize $gov $fir"
// Control variables of individual director background
global background "indceochair indacademic indgov indaccountant indlawyer indbanking indexecutive"
// Measures of remote meeting
global remotetag "remote synremote synremote1 nonsynremote1 synremote2"
// Variables in determinant analyses
	global bm "propnum annmt bmnum"
	global dir_all "avginddiflc avgboardseat avgindtenure avgmale avgindr boardsize" 
	global gov_all "duality ceofamily ceoratio age_CEO tenure_CEO"
	global fir_all "roa lev size state instratio"
	global urgency "performdrop interval "
	global c_all "$urgency $dir_all $gov_all $bm $fir_all"
// Total variables
global c_win "$bm $c_attend $c_force $_dissent $remotetag $c_all attendperind interval"


*******************************************************
*** Table 1: Distribution of remote (face-to-face) meetings/proposals ***
*******************************************************
//Panel A: Distribution of remote and face-to-face meetings by year
	use pseudo_reg_bm_upload, clear
	gen type=1 if synremote==1
	replace type=2 if nonsynremote1==1
	replace type=3 if remote==1&synremote!=1&nonsynremote1!=1 
	replace type=5 if remote==0 
	tab year type,r
		tab year remote,r
//Panel C: Distribution of remote and face-to-face meetings by the number of proposals covered
	gen propnum1=propnum_raw
	replace propnum1=5 if propnum1>5
	tab type propnum1,r
		tab remote propnum1,r
//Panel B: Distribution of remote and face-to-face proposals by topics
	use pseudo_reg_proposal_upload, clear
	gen type=1 if synremote==1
	replace type=2 if nonsynremote1==1
	replace type=3 if remote==1&synremote!=1&nonsynremote1!=1 
	replace type=5 if remote==0 
	tab ccat type,r 
		tab ccat remote,r 
//Panel D: Distribution of firms by the proportion of meetings that are held remotely
	use pseudo_reg_bm_upload, clear
	//percentage of remote meeting
	bys code:egen remotepermt=mean(remote)
	duplicates drop code,force
	//summary
	local xx "remotepermt"
	foreach i in `xx' {
	gen `i'gr=0 if `i'==0
	replace `i'gr=1 if `i'<=0.25&`i'gr==.
	replace `i'gr=2 if `i'<=0.5&`i'gr==.
	replace `i'gr=3 if `i'<=0.75&`i'gr==.
	replace `i'gr=4 if `i'<1&`i'gr==.
	replace `i'gr=5 if `i'==1&`i'gr==.
	}
	//layout
	tab remotepermtgr
		
		
*******************************************************
*** Table 2: Summary statistics ***
*******************************************************
	use pseudo_reg_bm_upload, clear

	global bm_raw "bmnum_raw propnum_raw interval_raw"
	global fir_raw "roa lev size_raw tobinq state top1 instratio"
	global gov_raw "duality ceofamily ceoratio age_CEO_raw tenure_CEO_raw"
	global dir_raw "avginddiflc avgboardseat avgindtenure avgmale avgindr numboard" 

// Column (1) and (2): Full sample
	logout, auto(4) save(temp) excel replace:tabstat performdrop $fir_raw annmt $bm_raw $dir_raw $gov_raw, stat(me med co) f(%10.3f) c(s)
// Column (3) and (4): Remote meeting sample
	logout, auto(4) save(temp) excel replace:tabstat performdrop $fir_raw annmt $bm_raw $dir_raw $gov_raw if remote==1, stat(me med co) f(%10.3f) c(s)
// Column (5) and (6): Synchronous remote meeting sample
	logout, auto(4) save(temp) excel replace:tabstat performdrop $fir_raw annmt $bm_raw $dir_raw $gov_raw if synremote==1, stat(me med co) f(%10.3f) c(s)
// Column (7) and (8): Synchronous remote meeting sample
	logout, auto(4) save(temp) excel replace:tabstat performdrop $fir_raw annmt $bm_raw $dir_raw $gov_raw if remote==0, stat(me med co) f(%10.3f) c(s)
// Column (9) and (10): Remote vs. Face-to-face
	//ttest
	local Y performdrop $fir_raw annmt $bm_raw $dir_raw $gov_raw
	foreach x of local Y{
	ttest `x' ,by(remote)
	gen z`x'=r(t)
	}
	su z*
	drop z*
	//ranksum
	local Y performdrop $fir_raw annmt $bm_raw $dir_raw $gov_raw
	foreach x of local Y{
	ranksum `x' ,by(remote)
	gen z`x'=r(z)
	}
	su z*
	drop z*
// Column (11) and (12): Synchronous remote vs. Face-to-face
	//ttest
	local Y performdrop $fir_raw annmt $bm_raw $dir_raw $gov_raw
	foreach x of local Y{
	ttest `x' ,by(synremote)
	gen z`x'=r(t)
	}
	su z*
	drop z*
	//ranksum
	local Y performdrop $fir_raw annmt $bm_raw $dir_raw $gov_raw
	foreach x of local Y{
	ranksum `x' ,by(synremote)
	gen z`x'=r(z)
	}
	su z*
	

*******************************************************
*** Table 3: Determinants analysis***
*******************************************************
	use pseudo_reg_bm_upload, clear
// Column (1) and (2): Synchronous meeting sample
	xi:logit synremote $c_all i.ind i.year, vce (cluster code) asis
	xi:clogit synremote $c_all i.year,group(code) vce (cluster code) 
// Column (3) and (4): Full sample
	xi:logit remote $c_all i.ind i.year,r cluster(code) asis
	xi:clogit remote $c_all i.year,group(code) vce (cluster code) 

	
*******************************************************
*** Table 4: Attendance analyses***
*******************************************************
// Synchronous meeting sample
// Column (1) and (2): meeting level analyses
	use pseudo_reg_bm_upload, clear
			drop if synremote==. 
	xi:tobit attendperind synremote $bm $c_attend i.year i.month i.ind,ul(1) vce (cluster code)
	xi:tobit attendperind synremote $bm $c_attend i.year i.month i.code,ul(1) vce (cluster code)
// Column (3): meeting-director level analyses
	use pseudo_reg_bm-director_upload, clear
			drop if synremote==. 
			global inddir "indbusy inddiflc indage indmale indtenure indsalary"  
	xi:clogit indattend synremote $bm $c_attend_noinddir $inddir i.year i.month,group(namecode) vce (cluster code)
// Full sample
// Column (4) and (5): meeting level analyses
	use pseudo_reg_bm_upload, clear
		global c_winthis "attendperind"
	xi:tobit attendperind remote $bm $c_attend i.year i.month i.ind,ul(1) vce (cluster code)
	xi:tobit attendperind remote $bm $c_attend i.year i.month i.code,ul(1) vce (cluster code)
// Column (6): meeting-director level analyses
	use pseudo_reg_bm-director_upload, clear
			global inddir "indbusy inddiflc indage indmale indtenure indsalary"  
	xi:clogit indattend remote $bm $c_attend_noinddir $inddir i.year i.month,group(namecode) vce (cluster code)


*******************************************************
*** Table 5: Dissent analyses***
*******************************************************
// Panel A: Proposal- and proposal-director-level analysis
// Synchronous meeting sample
// Column (1) and (2) and (4) and (5): proposal level analyses
	use pseudo_reg_proposal_upload, clear
			drop if synremote==. 
		gen synremote_relate=synremote*relate
		gen synremote_monitor=synremote*monitor
	xi:logit dissent synremote relate synremote_relate $bm $c_dissent i.ccat i.year i.month i.ind,asis cluster(code) 
	xi:clogit dissent synremote relate synremote_relate $bm $c_dissent i.ccat i.year i.month, group(code) vce(cluster code) 
	xi:logit dissent synremote monitor synremote_monitor $bm $c_dissent i.ccat i.year i.month i.ind,asis cluster(code) 
	xi:clogit dissent synremote monitor synremote_monitor $bm $c_dissent i.ccat i.year i.month, group(code) vce(cluster code) 
// Column (3) and (6): proposal-director level analyses
	use pseudo_reg_proposal-director_upload,clear
			drop if synremote==.  
			global inddir "indbusy indage term socialtie inddiflc indmale indeduc indhiredbychair"  
			global background "indceochair indacademic indgov indaccountant indlawyer indbanking indexecutive"
		gen synremote_monitor=synremote*monitor
		gen synremote_relate=synremote*relate
	xi:clogit inddissent synremote relate synremote_relate $bm $c_dissent_noinddir $inddir $background i.ccat i.year i.month,group (namecode) vce (cluster code) 
	xi:clogit inddissent synremote monitor synremote_monitor $bm $c_dissent_noinddir $inddir $background i.ccat i.year i.month,group (namecode) vce (cluster code) 
// Full sample
// Column (7) and (8) and (10) and (11): proposal level analyses
	use pseudo_reg_proposal_upload, clear
		gen remote_relate=remote*relate
		gen remote_monitor=remote*monitor
	xi:logit dissent remote relate remote_relate $bm $c_dissent i.ccat i.year i.month i.ind,asis r cluster(code) 
	xi:clogit dissent remote relate remote_relate $bm $c_dissent i.ccat i.year i.month, group(code) vce(cluster code) 
	xi:logit dissent remote monitor remote_monitor $bm $c_dissent i.ccat i.year i.month i.ind,asis r cluster(code) 
	xi:clogit dissent remote monitor remote_monitor $bm $c_dissent i.ccat i.year i.month, group(code) vce(cluster code) 
// Column (9) and (12): proposal-director level analyses
	use pseudo_reg_proposal-director_upload,clear
			global inddir "indbusy indage term socialtie inddiflc indmale indeduc indhiredbychair"  
			global background "indceochair indacademic indgov indaccountant indlawyer indbanking indexecutive"
		gen remote_monitor=remote*monitor
		gen remote_relate=remote*relate
	xi:clogit inddissent remote relate remote_relate $bm $c_dissent_noinddir $inddir $background i.ccat i.year i.month,group (namecode) vce (cluster code)
	xi:clogit inddissent remote monitor remote_monitor $bm $c_dissent_noinddir $inddir $background i.ccat i.year i.month,group (namecode) vce (cluster code)
	
//Panel B: proposal fixed effects
	use pseudo_reg_proposal-director_upload,clear
			global inddir "indbusy indage term socialtie inddiflc indmale indeduc indhiredbychair"  
			global background "indbusy indacademic indgov indaccountant indlawyer indbanking indexecutive"
		keep if propdissent>0
		global c1 "indbusy indage term socialtie inddiflc indmale indeduc indhiredbychair $background" 
		global c2 "indbusy firstyoung socialtie inddiflc indmale indeduc indhiredbychair $background" 
// Column (1) and (2): Full sample
	xi:clogit inddissent $c1, group (propcode) vce (cluster code)
	xi:clogit inddissent $c2, group (propcode) vce (cluster code)
// Column (3) and (4): Remote meeting sample
	xi:clogit inddissent $c1 if remote==1,group (propcode) vce (cluster code)
	xi:clogit inddissent $c2 if remote==1,group (propcode) vce (cluster code)
// Column (5) and (6): Face-to-face meeting sample
	xi:clogit inddissent $c1 if remote==0,group (propcode) vce (cluster code)
	xi:clogit inddissent $c2 if remote==0,group (propcode) vce (cluster code)
	
	
*******************************************************
*** Table 6: forced turnover  ***
*******************************************************
// Column (1) —— (3): Synchronous meeting sample
	use pseudo_reg_bm_upload,clear
		drop if synremote==.  
		global x "roapq4_indadj" 
		gen synremote_$x=remote*$x
	xi:logit force1 synremote $x synremote_$x $bm $c_force_nofir i.ind i.year i.month,asis r cluster(code) 
	xi:logit force1 synremote $x synremote_$x $bm $c_force i.ind i.year i.month,asis r cluster(code) 
	xi:clogit force1 synremote $x synremote_$x $bm $c_force i.year i.month ,group(code) vce (cluster code) 
// Column (4) —— (6): Full sample
	use pseudo_reg_bm_upload,clear
		global x "roapq4_indadj" 
		gen remote_$x=remote*$x
	xi:logit force1 remote $x remote_$x $bm $c_force_nofir i.ind i.year i.month,asis r cluster(code) 
	xi:logit force1 remote $x remote_$x $bm $c_force i.ind i.year i.month,asis r cluster(code) 
	xi:clogit force1 remote $x remote_$x $bm $c_force i.year i.month ,group(code) vce (cluster code) 

	
*******************************************************
*** Table 7: Heckman  ***
*******************************************************
// Panel A: Synchronous meeting sample
// Columns (1) and (2): Attendance
	use pseudo_reg_bm_upload,clear
			drop if synremote==.  
		global c_iv "gdpper_real unemployment severefreq"
		global cont_prov "gdpper_real unemployment severefreq i.station" 
	xi: probit synremote severe $bm $c_attend $cont_prov i.year_month i.ind,asis vce (cluster code)
				est store m1
				predict ww, xb	
		gen lambda=normalden(ww)/normal(ww) if synremote==1
		replace lambda=-normalden(ww)/normal(-ww) if synremote==0	
		gen lambda_synremote=lambda*synremote
		gen lambda_synremote_=lambda*(1-synremote)
	xi:tobit attendperind synremote lambda_synremote lambda_synremote_ $bm $c_attend $cont_prov i.year_month i.ind,ul(1) vce (cluster code)
// Columns (3) —— (5): Dissent
	use pseudo_reg_proposal_upload,clear
			drop if synremote==.  
		global c_iv "gdpper_real unemployment severefreq"
		global cont_prov "gdpper_real unemployment severefreq i.station" 
	xi: probit synremote severe $bm $c_dissent $cont_prov i.ccat i.year_month i.ind,asis vce (cluster code)
				est store m1
				predict ww, xb	
		gen lambda=normalden(ww)/normal(ww) if synremote==1
		replace lambda=-normalden(ww)/normal(-ww) if synremote==0	
		gen lambda_synremote=lambda*synremote
		gen lambda_synremote_=lambda*(1-synremote)
		gen synremote_relate=synremote*relate
		gen synremote_monitor=synremote*monitor
	xi:probit dissent synremote relate synremote_relate lambda_synremote lambda_synremote_ $bm $c_dissent $cont_prov i.ccat i.year_month i.ind, vce (cluster code) asis
	xi:probit dissent synremote monitor synremote_monitor lambda_synremote lambda_synremote_ $bm $c_dissent $cont_prov i.ccat i.year_month i.ind, vce (cluster code) asis
// Columns (6) and (7): Forceturn
	use pseudo_reg_bm_upload,clear
			drop if synremote==.  
		global x "roapq4_indadj" 
		global c_iv "gdpper_real unemployment severefreq"
		global cont_prov "gdpper_real unemployment severefreq i.station" 
	xi: probit synremote severe $bm $c_force $cont_prov i.year_month i.ind if $x!=.,asis vce (cluster code)
			est store m1
			predict ww, xb	
		gen lambda=normalden(ww)/normal(ww) if synremote==1
		replace lambda=-normalden(ww)/normal(-ww) if synremote==0	
		gen lambda_synremote=lambda*synremote
		gen lambda_synremote_=lambda*(1-synremote)
		gen synremote_$x=synremote*$x		
	xi:probit force1 synremote $x synremote_$x lambda_synremote lambda_synremote_ $bm $c_force $cont_prov i.year_month i.ind if $x!=.,asis vce (cluster code)

// Panel B: Full sample
// Columns (1) and (2): Attendance
	use pseudo_reg_bm_upload,clear
		global c_iv "gdpper_real unemployment severefreq"
		global cont_prov "gdpper_real unemployment severefreq i.station" 
	xi: probit remote severe $bm $c_attend $cont_prov i.year_month i.ind,asis vce (cluster code)
				est store m1
				predict ww, xb	
		gen lambda=normalden(ww)/normal(ww) if remote==1
		replace lambda=-normalden(ww)/normal(-ww) if remote==0	
		gen lambda_remote=lambda*remote
		gen lambda_remote_=lambda*(1-remote)
	xi:tobit attendperind remote lambda_remote lambda_remote_ $bm $c_attend $cont_prov i.year_month i.ind,ul(1) vce (cluster code)
// Columns (3) —— (5): Dissent
	use pseudo_reg_proposal_upload,clear
		global c_iv "gdpper_real unemployment severefreq"
		global cont_prov "gdpper_real unemployment severefreq i.station" 
	xi: probit remote severe $bm $c_dissent $cont_prov i.ccat i.year_month i.ind,asis vce (cluster code)
				est store m1
				predict ww, xb	
		gen lambda=normalden(ww)/normal(ww) if remote==1
		replace lambda=-normalden(ww)/normal(-ww) if remote==0	
		gen lambda_remote=lambda*remote
		gen lambda_remote_=lambda*(1-remote)
		gen remote_relate=remote*relate
		gen remote_monitor=remote*monitor
	xi:probit dissent remote relate remote_relate lambda_remote lambda_remote_ $bm $c_dissent $cont_prov i.ccat i.year_month i.ind, vce (cluster code) asis 
	xi:probit dissent remote monitor remote_monitor lambda_remote lambda_remote_ $bm $c_dissent $cont_prov i.ccat i.year_month i.ind, vce (cluster code) asis 
// Columns (6) and (7): Forceturn
	use pseudo_reg_bm_upload,clear
		global x "roapq4_indadj" 
		global c_iv "gdpper_real unemployment severefreq"
		global cont_prov "gdpper_real unemployment severefreq i.station" 
	xi: probit remote severe $bm $c_force $cont_prov i.year_month i.ind if $x!=.,asis vce (cluster code)
			est store m1
			predict ww, xb	
		gen lambda=normalden(ww)/normal(ww) if remote==1
		replace lambda=-normalden(ww)/normal(-ww) if remote==0	
		gen lambda_remote=lambda*remote
		gen lambda_remote_=lambda*(1-remote)
		gen remote_$x=remote*$x		
	xi:probit force1 remote $x remote_$x lambda_remote lambda_remote_ $bm $c_force $cont_prov i.year_month i.ind if $x!=.,asis vce (cluster code) 

	
*******************************************************
*** Table 8: M&A  ***
*******************************************************
// Columns (1) and (2): Synchronous meeting sample
	use pseudo_reg_m&a_upload,clear
		drop if synremote==.  	
			global bm "propnum annmt bmnum"
			global dir "avginddiflc avgboardseat avgmale avgindr boardsize duality" 
			global fir "lev size tobinq state top1 cfo"
			global deal " relativesize1 allcashdeal allstockdeal dummy_diff_ind hightechdeal publictarget"
			global mkt "bhar"		
		global c1 "$bm $deal $dir"
		global c2 "$bm $deal $dir $fir $mkt"
		global x "allrptdeal" 
		gen synremote_$x=synremote*$x 
	xi:reg car synremote $x synremote_$x $c1 i.year i.month i.ind,r cluster(code) 
	xi:reg car synremote $x synremote_$x $c2 i.year i.month i.ind,r cluster(code) 
// Columns (3) and (4): Full sample
	use pseudo_reg_m&a_upload,clear
			global bm "propnum annmt bmnum"
			global dir "avginddiflc avgboardseat avgmale avgindr boardsize duality" 
			global fir "lev size tobinq state top1 cfo"
			global deal " relativesize1 allcashdeal allstockdeal dummy_diff_ind hightechdeal publictarget"
			global mkt "bhar"		
		global c1 "$bm $deal $dir"
		global c2 "$bm $deal $dir $fir $mkt"
		global x "allrptdeal" 
		gen remote_$x=remote*$x 
	xi:reg car remote $x remote_$x $c1 i.year i.month i.ind,r cluster(code) 
	xi:reg car remote $x remote_$x $c2 i.year i.month i.ind,r cluster(code) 

	
*******************************************************
*** Table 9: synchronous, nonsynchronou, face-to-face  ***
*******************************************************
// Column (1): Attendance
	use pseudo_reg_bm_upload, clear
			drop if synremote1==.&nonsynremote1==.
	xi:tobit attendperind synremote1 nonsynremote1 $bm $c_attend i.year i.month i.ind,ul(1) vce (cluster code)
// Columns (2) and (3): Dissent
	use pseudo_reg_proposal_upload, clear
			drop if synremote1==.&nonsynremote1==.
		global xx "relate"
		gen synremote1_$xx=synremote1*$xx
		gen nonsynremote1_$xx=nonsynremote1*$xx
	xi:logit dissent synremote1 nonsynremote1 $xx synremote1_$xx nonsynremote1_$xx $bm $c_dissent i.ccat i.year i.month i.ind,asis r cluster(code) 
		global xx "monitor"
		gen synremote1_$xx=synremote1*$xx
		gen nonsynremote1_$xx=nonsynremote1*$xx
	xi:logit dissent synremote1 nonsynremote1 $xx synremote1_$xx nonsynremote1_$xx $bm $c_dissent i.ccat i.year i.month i.ind,asis r cluster(code) 
// Column (4): Forceturn
	use pseudo_reg_bm_upload,clear
			drop if synremote1==.&nonsynremote1==.
		global x "roapq4_indadj" 
		gen synremote1_$x=synremote1*$x
		gen nonsynremote1_$x=nonsynremote1*$x
	xi:logit force1 synremote1 nonsynremote1 $x synremote1_$x nonsynremote1_$x $bm $c_force i.ind i.year i.month,asis r cluster(code) 

	
*******************************************************
*** Table 10: machine learning sample  ***
*******************************************************
// Columns (1) and (2): Attendance
	use pseudo_reg_bm_upload, clear
			drop if synremote2==.
	xi:tobit attendperind synremote2 $bm $c_attend i.year i.month i.ind,ul(1) vce (cluster code)
	qui xi:tobit attendperind synremote2 $bm $c_attend i.year i.month i.code,ul(1) vce (cluster code)
// Columns (3) —— (6): Dissent
	use pseudo_reg_proposal_upload, clear
			drop if synremote2==.
		gen synremote2_relate=synremote2*relate
		gen synremote2_monitor=synremote2*monitor
	xi:logit dissent synremote2 relate synremote2_relate $bm $c_dissent i.ccat i.year i.month i.ind,asis r cluster(code) 
	xi:clogit dissent synremote2 relate synremote2_relate $bm $c_dissent i.ccat i.year i.month, group(code) vce(cluster code) 
	xi:logit dissent synremote2 monitor synremote2_monitor $bm $c_dissent i.ccat i.year i.month i.ind,asis r cluster(code) 
	xi:clogit dissent synremote2 monitor synremote2_monitor $bm $c_dissent i.ccat i.year i.month, group(code) vce(cluster code) 
// Columns (7) and (8): Forceturn
	use pseudo_reg_bm_upload,clear
			drop if synremote2==.
		global x "roapq4_indadj" 
		gen synremote2_$x=synremote2*$x
	xi:logit force1 synremote2 $x synremote2_$x $bm $c_force i.ind i.year i.month,asis r cluster(code) 
	xi:clogit force1 synremote2 $x synremote2_$x $bm $c_force i.year i.month, group(code) vce(cluster code) 
	

	
*****************************************************************************************
********************************** Internet Appendix ************************************
*****************************************************************************************

*******************************************************
*** Appendix Table A: Including firms from financial service industries  ***
*******************************************************
// Columns (1) and (2): Attendance
	use pseudo_reg_bm_upload, clear
		append using pseudo_reg_bm_upload_fin
			drop if synremote==.
	xi:tobit attendperind synremote $bm $c_attend i.year i.month i.ind,ul(1) vce (cluster code)
	xi:tobit attendperind synremote $bm $c_attend i.year i.month i.code,ul(1) vce (cluster code)
// Columns (3) —— (6): Dissent
	use pseudo_reg_proposal_upload, clear
		append using pseudo_reg_proposal_upload_fin
			drop if synremote==.
		gen synremote_relate=synremote*relate
		gen synremote_monitor=synremote*monitor
	xi:logit dissent synremote relate synremote_relate $bm $c_dissent i.ccat i.year i.month i.ind,asis r cluster(code) 
	xi:clogit dissent synremote relate synremote_relate $bm $c_dissent i.ccat i.year i.month, group(code) vce(cluster code) 
	xi:logit dissent synremote monitor synremote_monitor $bm $c_dissent i.ccat i.year i.month i.ind,asis r cluster(code) 
	xi:clogit dissent synremote monitor synremote_monitor $bm $c_dissent i.ccat i.year i.month, group(code) vce(cluster code) 
// Columns (7) and (8): Forceturn
	use pseudo_reg_bm_upload,clear
		append using pseudo_reg_bm_upload_fin
			drop if synremote==.
		global x "roapq4_indadj" 
		gen synremote_$x=synremote*$x
	xi:logit force1 synremote $x synremote_$x $bm $c_force i.ind i.year i.month,asis r cluster(code) 
	xi:clogit force1 synremote $x synremote_$x $bm $c_force i.year i.month, group(code) vce(cluster code) 
	
	
*******************************************************
*** Appendix Table B: Distribution of remote and face-to-face meetings by month and industry  ***
*******************************************************
use pseudo_reg_bm_upload, clear
	gen type=1 if synremote==1
	replace type=2 if nonsynremote1==1
	replace type=3 if remote==1&synremote!=1&nonsynremote1!=1 
	replace type=5 if remote==0 
	tab month type,r
		tab month remote,r
	tab ind_1 type,r
		tab ind_1 remote,r
	
	
*******************************************************
*** Appendix Table C: Distribution of proposal topics in remote (face-to-face) meetings  ***
*******************************************************
use pseudo_reg_proposal_upload, clear
	gen type=1 if synremote==1
	replace type=2 if nonsynremote1==1
	replace type=3 if remote==1&synremote!=1&nonsynremote1!=1 
	replace type=5 if remote==0 
	tab type ccat,r 
		tab remote ccat,r 

		
*******************************************************
*** Appendix Table E: PSM  ***
*******************************************************
//significant in at least two columns of determinant analyses
global bm "propnum annmt bmnum"
global fir_all "roa lev size state instratio" 
global c_matching "performdrop interval avginddiflc avgindtenure boardsize $bm $fir_all" 
	
//board meeting level
use pseudo_reg_bm_upload,clear
		drop if synremote==.
		gsort meetingcode
	//psmatch2
		xi:psmatch2 synremote $c_matching i.year i.ind i.month, out(attendper) logit neighbor(1) noreplacement caliper(0.0001) 
	//Panel A: Columns (1) —— (3)
		keep if _weight!=.
	logout,auto(4) save (temp) excel replace: ttable2 $c_matching, by(synremote) f(%10.4f)
	local Y $c_matching
	foreach x of local Y{
	ttest `x' ,by(synremote)
	gen z`x'=r(t)
	}
	su z*
	//Panel B, Column (1): Attendance
	xi:tobit attendperind synremote $bm $c_attend i.year i.month i.ind,ul(1) vce (cluster code)
	//Panel B, Column (4): Forceturn
		global x "roapq4_indadj" 
		gen synremote_$x=synremote*$x
	xi:logit force1 synremote $x synremote_$x $bm $c_force i.ind i.year i.month,asis r cluster(code) 
		
//proposal level
use pseudo_reg_proposal_upload,clear
		drop if synremote==.
		drop if interval==.
		gsort propcode
	//psmatch2
		xi:psmatch2 synremote $c_matching i.year i.ind i.ccat i.month, out(dissent) logit noreplacement neighbor(1) caliper (0.0001)
	//Panel A: Columns (4) —— (6)
		keep if _weight!=.
	logout,auto(4) save (temp) excel replace: ttable2 $c_matching, by(synremote) f(%10.4f)
	local Y $c_matching
	foreach x of local Y{
	ttest `x' ,by(synremote)
	gen z`x'=r(t)
	}
	su z*		
	//Panel B, Columns (2) and (3): Dissent
		gen synremote_relate=synremote*relate
		gen synremote_monitor=synremote*monitor
	xi:logit dissent synremote relate synremote_relate $bm $c_dissent i.ccat i.year i.month i.ind,asis r cluster(code) 
	xi:logit dissent synremote monitor synremote_monitor $bm $c_dissent i.ccat i.year i.month i.ind,asis r cluster(code)) 

	
*******************************************************
*** Appendix Table F: firm-by-board fixed effect  ***
*******************************************************
//meeting-level
	use pseudo_reg_bm_upload,clear
		drop if synremote==.
	//Column (1): Attendance
	xi:tobit attendperind synremote $bm $c_attend i.year i.month i.indboardfx,ul(1) vce (cluster code) 
	//Column (4): Forceturn
		global x "roapq4_indadj" 
		gen synremote_$x=synremote*$x
	xi:clogit force1 synremote $x synremote_$x $bm $c_force i.year i.month,group(indboardfx) vce (cluster code) 
//proposal-level
	//Columns (2) and (3): Dissent
	use pseudo_reg_proposal_upload,clear
		drop if synremote==.
		gen synremote_relate=synremote*relate
		gen synremote_monitor=synremote*monitor
	xi:clogit dissent synremote relate synremote_relate $bm $c_dissent i.ccat i.year i.month, group(indboardfx) vce(cluster code) 
	xi:clogit dissent synremote monitor synremote_monitor $bm $c_dissent i.ccat i.year i.month, group(indboardfx) vce(cluster code) 

	
*******************************************************
*** Appendix Table G: Subsample with high and low director power  ***
*******************************************************
//meeting-level
	use pseudo_reg_bm_upload,clear
		drop if synremote==.
			pca avginddiflc avgindtenure boardsize 
			predict comp1-comp3 
			gen pca1=comp1
			drop comp1-comp3
		egen pca1med=median(pca1)
		gen pca1high=0
		replace pca1high=1 if pca1>=pca1med 	
	//Columns (1) and (2): Attendance
	xi:tobit attendperind synremote $bm $c_attend i.year i.month i.ind if pca1high==0,ul(1) vce (cluster code)
	xi:tobit attendperind synremote $bm $c_attend i.year i.month i.ind if pca1high==1,ul(1) vce (cluster code)
	//Columns (7) and (8): Forceturn
		global x "roapq4_indadj" 
		gen synremote_$x=synremote*$x
	xi:logit force1 synremote $x synremote_$x $bm $c_force i.ind i.year i.month if pca1high==0,asis r cluster(code) 
	xi:logit force1 synremote $x synremote_$x $bm $c_force i.ind i.year i.month if pca1high==1,asis r cluster(code) 
//proposal-level
	use pseudo_reg_proposal_upload,clear
		drop if synremote==.
			pca avginddiflc avgindtenure boardsize 
			predict comp1-comp3 
			gen pca1=comp1
			drop comp1-comp3
		egen pca1med=median(pca1)
		gen pca1high=0
		replace pca1high=1 if pca1>=pca1med 	
	//Columns (3) —— (6): Dissent
		gen synremote_relate=synremote*relate
		gen synremote_monitor=synremote*monitor
	xi:logit dissent synremote relate synremote_relate $bm $c_dissent i.ccat i.year i.month i.ind if pca1high==0,asis r cluster(code) 
	xi:logit dissent synremote relate synremote_relate $bm $c_dissent i.ccat i.year i.month i.ind if pca1high==1,asis r cluster(code) 
	xi:logit dissent synremote monitor synremote_monitor $bm $c_dissent i.ccat i.year i.month i.ind if pca1high==0,asis r cluster(code) 
	xi:logit dissent synremote monitor synremote_monitor $bm $c_dissent i.ccat i.year i.month i.ind if pca1high==1,asis r cluster(code) 
	
	
*******************************************************
*** Appendix Table H: Subsample with high and low corporate governance  ***
*******************************************************
//meeting-level
	use pseudo_reg_bm_upload,clear
		drop if synremote==.
			gen cg1=top1 //Ownership structure
			gen cg2=top2to10 //Ownership structure
			gen cg3=instratio //Ownership structure
			gen cg4=ceoratio //Managerial incentive
			gen cg5=ceopay //Managerial incentive
			gen cg6=duality //Managerial power
			gen cg7=avgindr //Board monitoring
			gen cg8=boardsize //Board monitoring
			pca cg1 cg2 cg3 cg4 cg5 cg6 cg7 cg8
			predict comp1-comp8 
			gen pca1=comp1
			drop comp1-comp8
		egen pca1med=median(pca1) 
		gen pca1high=0
		replace pca1high=1 if pca1>=pca1med 
	//Columns (1) and (2): Attendance
	xi:tobit attendperind synremote $bm $c_attend i.year i.month i.ind if pca1high==0,ul(1) vce (cluster code)
	xi:tobit attendperind synremote $bm $c_attend i.year i.month i.ind if pca1high==1,ul(1) vce (cluster code)
	//Columns (7) and (8): Forceturn
		global x "roapq4_indadj" 
		gen synremote_$x=synremote*$x
	xi:logit force1 synremote $x synremote_$x $bm $c_force i.ind i.year i.month if pca1high==0,asis r cluster(code) 
	xi:logit force1 synremote $x synremote_$x $bm $c_force i.ind i.year i.month if pca1high==1,asis r cluster(code) 

//proposal-level
	use pseudo_reg_proposal_upload,clear
		drop if synremote==.
			gen cg1=top1 //Ownership structure
			gen cg2=top2to10 //Ownership structure
			gen cg3=instratio //Ownership structure
			gen cg4=ceoratio //Managerial incentive
			gen cg5=ceopay //Managerial incentive
			gen cg6=duality //Managerial power
			gen cg7=avgindr //Board monitoring
			gen cg8=boardsize //Board monitoring
			pca cg1 cg2 cg3 cg4 cg5 cg6 cg7 cg8
			predict comp1-comp8 
			gen pca1=comp1
			drop comp1-comp3
		egen pca1med=median(pca1) 
		gen pca1high=0
		replace pca1high=1 if pca1>=pca1med 
	//Columns (3) —— (6): Dissent
		gen synremote_relate=synremote*relate
		gen synremote_monitor=synremote*monitor
	xi:logit dissent synremote relate synremote_relate $bm $c_dissent i.ccat i.year i.month i.ind if pca1high==0,asis r cluster(code) 
	xi:logit dissent synremote relate synremote_relate $bm $c_dissent i.ccat i.year i.month i.ind if pca1high==1,asis r cluster(code) 
	xi:logit dissent synremote monitor synremote_monitor $bm $c_dissent i.ccat i.year i.month i.ind if pca1high==0,asis r cluster(code) 
	xi:logit dissent synremote monitor synremote_monitor $bm $c_dissent i.ccat i.year i.month i.ind if pca1high==1,asis r cluster(code)
	
	
*******************************************************
*** Appendix Table I: M&A drop repeated  ***
*******************************************************
	use pseudo_reg_m&a_upload,clear
		drop if synremote==. 
			global bm "propnum annmt bmnum"
			global dir "avginddiflc avgboardseat avgmale avgindr boardsize duality" 
			global fir "lev size tobinq state top1 cfo"
			global deal " relativesize1 allcashdeal allstockdeal dummy_diff_ind hightechdeal publictarget"
			global mkt "bhar"
			global c "$bm $deal $dir $fir $mkt"
		global x "allrptdeal" 
		gen synremote_$x=synremote*$x 
	// Column (1): Drop revised M&A
	drop if revise==1 
	xi:reg car synremote $x synremote_$x $c i.year i.month i.ind,r cluster(code) 
	// Column (2): Drop repeated M&A in one quarter
	drop if repeatma_quarter>0&repeatma_quarter!=. 
	xi:reg car synremote $x synremote_$x $c i.year i.month i.ind,r cluster(code) 


*******************************************************
*** Appendix Table J: Regressions drop repeated  ***
*******************************************************
// Attendance
	use pseudo_reg_bm_upload, clear
		drop if synremote==. 		
	// Column (1): Drop meetings with revised proposals
	drop if revise_alltype==1 
	xi:tobit attendperind synremote $bm $c_attend i.year i.month i.ind,ul(1) vce (cluster code)
	// Column (2): Drop meetings with repeated proposals in one quarter
	drop if repeat_quarter>0&repeat_quarter!=. 		
	xi:tobit attendperind synremote $bm $c_attend i.year i.month i.ind,ul(1) vce (cluster code)
// Dissent
	use pseudo_reg_proposal_upload, clear
		drop if synremote==.
		gen synremote_relate=synremote*relate
		gen synremote_monitor=synremote*monitor
	// Columns (3) and (4): Drop revised proposals
	drop if revise_alltype==1 
	xi:logit dissent synremote relate synremote_relate $bm $c_dissent i.ccat i.year i.month i.ind,asis r cluster(code) 
	xi:logit dissent synremote monitor synremote_monitor $bm $c_dissent i.ccat i.year i.month i.ind,asis r cluster(code) 
	// Columns (5) and (6): Drop repeated proposals in one quarter
	drop if repeat_quarter>0&repeat_quarter!=. 	
	xi:logit dissent synremote relate synremote_relate $bm $c_dissent i.ccat i.year i.month i.ind,asis r cluster(code) 
	xi:logit dissent synremote monitor synremote_monitor $bm $c_dissent i.ccat i.year i.month i.ind,asis r cluster(code) 
// Forceturn
	use pseudo_reg_bm_upload, clear
		drop if synremote==. 		
		global x "roapq4_indadj" 
		gen synremote_$x=synremote*$x
	// Column (7): Drop meetings with revised turnover proposals
	drop if revise_turnover==1 
	xi:logit force1 synremote $x synremote_$x $bm $c_force i.ind i.year i.month,asis r cluster(code) 
	// Column (8): Drop meetings with repeated turnover proposals in one quarter
	drop if repeatturn_quarter>0&repeatturn_quarter!=. 	
	xi:logit force1 synremote $x synremote_$x $bm $c_force i.ind i.year i.month,asis r cluster(code) 


*******************************************************
*** Appendix Table K: Investment inefficiency  ***
*******************************************************
	use pseudo_reg_firmyear_upload, clear
		//investment regression
			global vv "investmentf1 lev size tobinq cfo listage sqret investment" 
			egen mis = rowmiss($vv)
			drop if mis 
			drop mis
			xi:reg $vv i.ind i.year
			predict r,r
			rename r xqinvresfin
			gen xqinvresfinabs=abs(xqinvresfin)
		//investment inefficiency
			local xx "xqinvresfinabs"
			foreach i in `xx' {
			egen x1=pctile(`i'), p(75)
			gen overinvdum=0
			replace overinvdum=1 if `i'>=x1
			}
			global xx "overinvdum" 
		global bm "bmnum"
		global dir "avginddiflc avgboardseat avgmale avgindr boardsize" 
		global fir "lev size tobinq state top1 cfo "
		global gov "duality"
		global ind ""
		global c "bmnum $dir $gov $fir $ind"
	// Columns (1) and (2): Synchronous remote meeting	
	xi:clogit $xx synremoteper_inv bmnum $dir $gov i.year,group(code) r cluster(code) 
	xi:clogit $xx synremoteper_inv $c i.year,group(code) r cluster(code) 
	// Columns (3) and (4): Remote meeting	
	xi:clogit $xx remoteper_inv bmnum $dir $gov i.year,group(code) r cluster(code) 
	xi:clogit $xx remoteper_inv $c i.year,group(code) r cluster(code) 



